from comunidadcyt.departamentos.models import Departamentos
from comunidadcyt.gruposDeInvestigacion.models import GruposDeInvestigacion
from comunidadcyt.proyectos.models import Proyectos

def puedeCrearDepartamento(user):
    if user:
        if user.is_superuser:
            return True
    return False

def puedeEditarDepartamento(user, depto):
    if user:
        if user.is_superuser:
            return True
        if depto.Director.id == user.id:
            return True
        if depto.esResponsable(user):
            return True
    return False

def puedeCrearGrupoInvestigacion(user):
    if user:
        if user.is_superuser:
            return True
        for depto in Departamentos.objects.all():
            if depto.Director.id == user.id:
                return True
            if depto.esResponsable(user):
                return True
    return False

def puedeCrearGrupoInvEnDepto(user, depto):
    if user:
        if user.is_superuser:
            return True
        if depto.Director.id == user.id:
            return True
        if depto.esResponsable(user):
            return True
    return False

def puedeEditarGrupoInvestigacion(user, grupo):
    if user:
        if user.is_superuser:
            return True
        if grupo.Departamento.Director.id == user.id:
            return True
        if grupo.Departamento.esResponsable(user):
            return True
        if grupo.esResponsable(user):
            return True
    return False

def puedeCrearLineaInv(user):
    if user:
        if user.is_superuser:
            return True
        for depto in Departamentos.objects.all():
            if depto.Director.id == user.id:
                return True
            if depto.esResponsable(user):
                return True
        for g in GruposDeInvestigacion.objects.all():
            if g.esResponsable(user):
                return True
        for p in Proyectos.objects.all():
            if p.esResponsable(user):
                return True
    return False

def puedeEditarLineaInv(user):
    return puedeCrearLineaInv(user)

def puedeCrearProyecto(user):
    if user:
        if user.is_superuser:
            return True
        for depto in Departamentos.objects.all():
            if depto.Director.id == user.id:
                return True
            if depto.esResponsable(user):
                return True
        for grupo in GruposDeInvestigacion.objects.all():
            if grupo.esResponsable(user):
                return True
    return False

def puedeCrearProyectoEnListaGrupoInv(user, listaGrupos):
    if user:
        for grupo in listaGrupos:
            if not puedeCrearProyectoEnGrupoInv(user, grupo):
                return False
        return True
    return False

def puedeCrearProyectoEnGrupoInv(user, grupo):
    if user:
        if user.is_superuser:
            return True
        for depto in grupo.Departamentos.all():
            if depto.Director.id == user.id:
                return True
            if depto.esResponsable(user):
                return True
        if grupo.esResponsable(user):
            return True
    return False

def puedeEditarProyecto(user, proyecto):
    if user:
        if user.is_superuser:
            return True
        for depto in proyecto.Departamentos.all():
            if depto.Director.id == user.id:
                return True
            if depto.esResponsable(user):
                return True
        for grupo in proyecto.Grupos.all():
            if grupo.esResponsable(user):
                return True
        if proyecto.esResponsable(user):
            return True
    return False

def puedeCrearPartner(user):
    if user:
        if user.is_superuser:
            return True
        for depto in Departamentos.objects.all():
            if depto.Director.id == user.id:
                return True
            if depto.esResponsable(user):
                return True
        for g in GruposDeInvestigacion.objects.all():
            if g.esResponsable(user):
                return True
        for p in Proyectos.objects.all():
            if p.esResponsable(user):
                return True
    return False

def puedeEditarPartner(user):
    return puedeCrearPartner(user)

def puedeCrearEventos(user):
    if user:
        if user.is_superuser:
            return True
    return False

def puedeEditarEventos(user):
    return puedeCrearEventos(user)

def puedeAprobarIngresosGruposInv(user):
    if puedeCrearDepartamento(user) or puedeCrearGrupoInvestigacion(user):
        return True
    return False

def puedeAprobarIngresoGrupoEspecifico(user, grupo):
    return puedeEditarGrupoInvestigacion(user, grupo)

def puedeAprobarIngresosProyectos(user):
    if puedeCrearDepartamento(user) or puedeCrearGrupoInvestigacion(user) or puedeCrearProyecto(user):
        return True
    return False

def puedeAprobarIngresoProyectoEspecifico(user, proyecto):
    return puedeEditarProyecto(user, proyecto)

def puedeCrearPublicacion(user):
    if user and user.is_authenticated:
        return True
    return False

def puedeEditarPublicacionEspecifica(user, publicacion):
    if user and publicacion:
        if user.is_superuser:
            return True
        if user.username == publicacion.creado_por:
            return True
        for u in publicacion.autores.all():
            if u.autor_interno and u.autor_interno.id == user.id:
                return True
    return False
